package simpledb.common;

import simpledb.storage.DbFile;

/**
 * 该类用于存储数据库中一张表的基本信息
 * 包括：1、表的唯一标识 ID；2、表名；3、对应的文件对象 DbFile；4、主键字段名
 * 是 Catalog 类用来保存每张表元数据的核心类
 */
public class TableInfo {

    // 表的唯一标识符（ID），通常由 DbFile.getId() 提供
    private int    tableId;

    // 表的名称（逻辑名称）
    private String tableName;

    // 表对应的数据文件对象，用于读取和写入实际的元组数据
    private DbFile dbFile;

    // 表的主键字段名称（可以为空）
    private String primaryKeyName;

    /**
     * 构造方法，初始化一张表的信息。
     *
     * @param tableId       表的唯一ID
     * @param tableName     表的名称
     * @param dbFile        表对应的数据文件对象
     * @param primaryKeyName 主键字段名称（可以为null或空字符串）
     */
    public TableInfo(final int tableId, final String tableName, final DbFile dbFile, final String primaryKeyName) {
        this.tableId = tableId;
        this.tableName = tableName;
        this.dbFile = dbFile;
        this.primaryKeyName = primaryKeyName;
    }

    /**
     * 获取表的ID。
     */
    public int getTableId() {
        return tableId;
    }

    /**
     * 设置表的ID。
     */
    public void setTableId(final int tableId) {
        this.tableId = tableId;
    }

    /**
     * 获取表的名称。
     */
    public String getTableName() {
        return tableName;
    }

    /**
     * 设置表的名称。
     */
    public void setTableName(final String tableName) {
        this.tableName = tableName;
    }

    /**
     * 获取表对应的数据库文件对象。
     */
    public DbFile getDbFile() {
        return dbFile;
    }

    /**
     * 设置表对应的数据库文件对象。
     */
    public void setDbFile(final DbFile dbFile) {
        this.dbFile = dbFile;
    }

    /**
     * 获取表的主键字段名。
     */
    public String getPrimaryKeyName() {
        return primaryKeyName;
    }

    /**
     * 设置表的主键字段名。
     */
    public void setPrimaryKeyName(final String primaryKeyName) {
        this.primaryKeyName = primaryKeyName;
    }
}
